package com.replayingDecoder;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class TimeClientHandler extends ChannelInboundHandlerAdapter {

	private byte[] req;

	public TimeClientHandler() {
		req = ("尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:尽管您可以只使用checkpoint()方法并自己管理解码器的状态，但管理解码器状态的最简单方法是创建一个Enum类型，它表示解码器的当前状态，并在状态发生变化时调用checkpoint(T)方法。你可以有尽可能多的状态，你想要取决于复杂的消息，你想解码:").getBytes();
	}

	@Override
	//客户端和服务器端建立连接后，netty的nio线程会调用channelActive按方法，发送查询时间的指令给服务端，调用writeAndFlush方法将请求消息发送给服务端
	public void channelActive(ChannelHandlerContext ctx) throws Exception {
		ByteBuf message = null;
		for(int i=0; i<1; i++){
			message = Unpooled.buffer(4 + req.length);
			message.writeInt(req.length);
			message.writeBytes(req);
			ctx.writeAndFlush(message);
		}
	}

}
